package ans.p593;

import test.Entrance;

/**
 * #      593
 * 名称   有效的正方形
 * 链接   https://leetcode-cn.com/problems/valid-square
 * 题解   [95](https://leetcode-cn.com/problems/valid-square/solution)
 * 通过率 44.1%
 * 难道   中等
 */

public class Solution {
    private long distanceSquare(int d1[], int d2[]) {
        return (d1[0] - d2[0]) * (d1[0] - d2[0]) + (d1[1] - d2[1]) * (d1[1] - d2[1]);
    }

    private int[][] valid(int[] d1, int[] d2, int d3[]) {
        long l1 = distanceSquare(d1, d2);
        long l2 = distanceSquare(d2, d3);
        long l3 = distanceSquare(d1, d3);
        if (l1 == l2 && l3 == l1 + l2) {
            return new int[][]{d1, d3};
        } else if (l1 == l3 && l2 == l1 + l3) {
            return new int[][]{d2, d3};
        } else if (l2 == l3 && l1 == l2 + l3) {
            return new int[][]{d1, d2};
        } else {
            return null;
        }
    }

    @Entrance
    public boolean validSquare(int[] p1, int[] p2, int[] p3, int[] p4) {
        int[][] v = valid(p1, p2, p3);
        if (v != null) {
            int[][] v1 = valid(v[0], v[1], p4);
            if ((v1[0] == v[0] && v1[1] == v[1]) || (v1[1] == v[0] && v1[0] == v[1])) {
                return true;
            }

        }
        return false;
    }


}